package com.pan.admin.module.datareport.dao;

import com.pan.admin.module.datareport.entity.AmountVO;
import com.pan.admin.module.datareport.entity.CostVO;
import com.pan.admin.module.datareport.entity.PushVO;
import com.pan.admin.module.datareport.entity.RechargeVO;
import com.pan.admin.module.datareport.entity.RevenueVO;
import com.pan.admin.module.datareport.entity.StartTimeAndEndTime;
import com.pan.admin.module.datareport.entity.StockVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 数据报表
 *
 * @author caoxin
 */
@Mapper
public interface DataReportDao {

    /**
     * 存量
     */
    List<StockVO> listStock(@Param("startTimeAndEndTime") StartTimeAndEndTime startTimeAndEndTime, @Param("loanChannelId") List<Long> loanChannelId);

    /**
     * 推送量
     */
    List<PushVO> listPush(@Param("startTimeAndEndTime") StartTimeAndEndTime startTimeAndEndTime, @Param("loanChannelId") List<Long> loanChannelId);

    /**
     * 主体计划城市分布情况
     */
    List<Map<String, Object>> listPlanCityDistributionSituation(@Param("limit") Boolean limit);

    /**
     * 主体余额情况
     */
    List<Map<String, Object>> listLoanProductBalanceSituation(@Param("desc") Boolean desc);

    /**
     * 收益
     */
    List<RevenueVO> listRevenue(@Param("startTimeAndEndTime") StartTimeAndEndTime startTimeAndEndTime, @Param("loanChannelId") List<Long> loanChannelId, @Param("loanProductId") List<Long> loanProductId);

    /**
     * 成本
     */
    List<CostVO> listCost(@Param("startTimeAndEndTime") StartTimeAndEndTime startTimeAndEndTime, @Param("loanChannelId") List<Long> loanChannelId, @Param("loanProductId") List<Long> loanProductId);

    /**
     * 充值波动情况
     */
    List<RechargeVO> listRecharge(@Param("startTimeAndEndTime") StartTimeAndEndTime startTimeAndEndTime, @Param("loanProductId") List<Long> loanProductId);

    /**
     * 消耗波动情况
     */
    List<AmountVO> listAmount(@Param("startTimeAndEndTime") StartTimeAndEndTime startTimeAndEndTime, @Param("loanProductId") List<Long> loanProductId);

}
